home *** CD-ROM | disk | FTP | other *** search
- /*
- * Recording Animation in Binary Order for Progressive Temporal Refinement
- * by Paul Heckbert
- * from "Graphics Gems", Academic Press, 1990
- */
-
- /*
- * binrec.c: demonstrate binary recording order
- *
- * Paul Heckbert Jan 90
- */
-
- #include <stdio.h>
-
- main(ac, av)
- int ac;
- char **av;
- {
- int nframes, i, start_frame, repeat_count;
- if (ac!=2) {
- fprintf(stderr, "Usage: binrec <nframes>\n");
- exit(1);
- }
- nframes = atoi(av[1]);
-
- printf("step startframe repeatcount\n");
- for (i=0; i<nframes; i++) {
- inside_out(nframes, i, &start_frame, &repeat_count);
- printf(" %2d %2d %2d\n", i, start_frame, repeat_count);
- }
- }
-
- /*
- * inside_out: turn a number "inside-out": a generalization of bit-reversal.
- * For n = power of two, this is equivalent to bit-reversal.
- *
- * Turn the number a inside-out, yielding b. If 0<=a<n then 0<=b<n.
- * Also return r = min(n-b, largest power of 2 dividing b)
- */
-
- inside_out(n, a, b, r)
- int n, a, *b, *r;
- {
- int k, m;
-
- *r = m = n;
- for (*b=0, k=1; k<n; k<<=1)
- if (a<<1>=m) {
- if (*b==0) *r = k;
- *b += k;
- a -= (m+1)>>1;
- m >>= 1;
- }
- else m = (m+1)>>1;
- if (*r>n-*b) *r = n-*b;
- }
-